package cn.cxq.learning.single_linked_list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Stack;

/**
 * 剑指offer
 * 从尾到头打印链表
 * 时间限制：C/C++ 1秒，其他语言2秒 空间限制：C/C++ 64M，其他语言128M 热度指数：1524986
 * 本题知识点： 链表
 *  算法知识视频讲解
 * 题目描述
 * 输入一个链表，按链表从尾到头的顺序返回一个ArrayList。
 * 示例1
 * 输入
 * 复制
 * {67,0,24,58}
 * 返回值
 * 复制
 * [58,24,0,67]
 */
public class ReverseLinkedList {

    //思路：使用栈和单链表的遍历轻松解决。
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {

        ArrayList<Integer> valueList = new ArrayList<>();
        Stack<Integer> integerStack = new Stack<>();

        ListNode temp = listNode;

        while (temp != null) {
            integerStack.add(temp.val);
            temp = temp.next;
        }

        while (!integerStack.empty()) {
            valueList.add(integerStack.pop());
        }

        return valueList;
    }

}

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}